package com.dhcc.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dhcc.base.BaseServiceImpl;
import com.dhcc.entity.SysDept;
import com.dhcc.entity.SysPosition;
import com.dhcc.httpApiService.IdGeneratorService;
import com.dhcc.mapper.SysPositionMapper;
import com.dhcc.service.SysPositionService;
import com.dhcc.service.SysUserService;
import jakarta.annotation.Resource;
import lombok.val;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 岗位表接口实现类
 * @ProjectName Dhcc-Cloud
 * @PackageName com.dhcc.service.impl
 * @Title SysPositionServiceImpl
 * @Date 2024/12/5 下午3:52
 * @Author LiuGuoting
 */
@Service
public class SysPositionServiceImpl extends BaseServiceImpl<SysPositionMapper, SysPosition> implements SysPositionService {
    /**
     * ID生成器接口
     */
    @Resource
    private IdGeneratorService idGeneratorService;
    /**
     * 用户服务接口
     */
    @Resource
    private SysUserService sysUserService;

    /**
     * 自定义分页查询岗位信息
     *
     * @param page 分页对象
     * @param sysPosition 岗位信息对象实体
     * @return 分页对象
     */
    @Override
    public IPage<SysPosition> page(IPage<SysPosition> page, SysPosition sysPosition) {
        // 自定义查询条件
        LambdaQueryWrapper<SysPosition> wrapper = new LambdaQueryWrapper<>();
        // 岗位名称模糊查询
        wrapper.like(StringUtils.hasText(sysPosition.getPositionName()), SysPosition::getPositionName, sysPosition.getPositionName())
                // 查询未删除的岗位信息
                .eq(SysPosition::getDelFlag, 0)
                // 排序
                .orderByDesc(SysPosition::getSort);
        baseMapper.selectPage(page, wrapper).getRecords().forEach(sysPosition1 -> {
            // 设置创建者名称
            sysPosition1.setCreateUser(sysUserService.getUserNameById(sysPosition1.getCreateUser()));
            // 设置更新者名称
            sysPosition1.setUpdateUser(sysUserService.getUserNameById(sysPosition1.getUpdateUser()));
        });
        return page;
    }

    /**
     * 查询所有岗位信息
     * @return 岗位信息列表
     */
    @Override
    public List<SysPosition> listAll() {
        // 创建查询条件
        LambdaQueryWrapper<SysPosition> wrapper = new LambdaQueryWrapper<>();
        // 查询未删除的岗位信息
        wrapper.eq(SysPosition::getDelFlag, 0);
        // 排序
        wrapper.orderByDesc(SysPosition::getSort);
        // 查询岗位信息
        List<SysPosition> list = list(wrapper);
        // 设置创建者名称和更新者名称
        list.forEach(sysPosition -> {
            sysPosition.setCreateUser(sysUserService.getUserNameById(sysPosition.getCreateUser()));
            sysPosition.setUpdateUser(sysUserService.getUserNameById(sysPosition.getUpdateUser()));
        });
        return list;
    }

    /**
     * 新增岗位信息
     *
     * @param sysPosition 岗位信息对象实体
     * @return 插入结果
     */
    @Override
    public Boolean addSysPosition(SysPosition sysPosition) {
        // 设置岗位ID
        sysPosition.setId(idGeneratorService.nextId().toString());
        // 插入岗位信息
        return baseMapper.insert(sysPosition) > 0;
    }

    /**
     * 更新岗位信息
     *
     * @param sysPosition 岗位信息对象实体
     * @return 更新结果
     */
    @Override
    public Boolean updateSysPosition(SysPosition sysPosition) {
        // 更新岗位信息
        LambdaQueryWrapper<SysPosition> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysPosition::getId, sysPosition.getId());
        return baseMapper.update(sysPosition,wrapper) > 0;
    }

    /**
     * 查询岗位信息
     * @param id 岗位ID
     * @return 岗位信息对象实体
     */
    @Override
    public SysPosition getSysPositionById(String id) {
        LambdaQueryWrapper<SysPosition> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysPosition::getId, id);
        SysPosition sysPosition = baseMapper.selectOne(wrapper);
        if (sysPosition != null) {
            sysPosition.setCreateUser(sysUserService.getUserNameById(sysPosition.getCreateUser()));
            sysPosition.setUpdateUser(sysUserService.getUserNameById(sysPosition.getCreateUser()));
            return sysPosition;
        }
        return null;
    }

    /**
     * 更新岗位状态
     *
     * @param id 岗位ID
     * @param status 状态
     * @return 更新结果
     */
    @Override
    public Boolean updateStatus(String id, int status) {
        // 1. 构建更新条件
        LambdaUpdateWrapper<SysPosition> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(SysPosition::getId, id).set(SysPosition::getStatus, status);
        // 2. 更新岗位状态
        return baseMapper.update(wrapper) > 0;
    }

    /**
     * 批量更新岗位状态
     *
     * @param ids    岗位ID集合
     * @param status 状态
     */
    @Override
    public Boolean updateStatusBatch(List<String> ids, int status) {
        // 1. 构建更新条件
        LambdaUpdateWrapper<SysPosition> wrapper = new LambdaUpdateWrapper<>();
        wrapper.in(SysPosition::getId, ids).set(SysPosition::getStatus, status);
        // 2. 更新岗位状态
        return baseMapper.update(wrapper) > 0;
    }
}
